package com.tjcd.project.library_base.common.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.ObjectUtils;
import com.tjcd.project.library_base.R;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Nullable;

/**
 * @Author jiangKunKun
 * @CreateDate 2021/7/12
 * @Description Excel单元格
 * @SpittingGrooves
 */
public class ExcelCellLayout extends LinearLayout {
    /**
     * 默认宽度单位值
     */
    final int DEFAULT_WIDTH_UNIT = 40;
    /**
     * 默认高度单位值
     */
    final int DEFAULT_HEIGHT_UNIT = 36;
    /**
     * 默认高
     */
    private int mCellHeightUnit = DEFAULT_HEIGHT_UNIT;
    /**
     * 默认宽
     */
    private int mCellWidthUnit = DEFAULT_WIDTH_UNIT;
    /**
     * 最大宽度
     */
    private int maxCellWidth = DEFAULT_WIDTH_UNIT * 4;
    /**
     * 最大高度
     */
    private int maxCellHeight = DEFAULT_HEIGHT_UNIT * 2;
    /**
     * 最小宽度
     */
    private int minCellWidth = (DEFAULT_WIDTH_UNIT - 10) * 2;
    /**
     * 最小高度
     */
    private int minCellHeight = DEFAULT_HEIGHT_UNIT;
    /**
     * 背景颜色
     */
    private int mBgColor;
    /**
     * 文字颜色
     */
    private int mTvColor;
    /**
     * 文字大小
     */
    private float mTvTextSize;
    /**
     * 数据源
     */
    private List<String> mCellDatas = new ArrayList<>();
    /**
     * 对应宽度
     */
    private List<Integer> mCellWidths = new ArrayList<>();
    /**
     * 上下文
     */
    private Context mContext;
    /**
     * cell集合
     */
    private List<MarqueeTextView> mCellTv = new ArrayList<>();
    /**
     * 操作颜色
     */
    private List<Integer> opColors = new ArrayList<>();
    /**
     * 操作位置
     */
    private List<Integer> opPositions = new ArrayList<>();
    /**
     * 操作监听
     */
    private List<OnClickListener> mClickListeners = new ArrayList<>();

    public ExcelCellLayout(Context context) {
        super(context, null);
    }

    public ExcelCellLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        init();
    }

    /**
     * 初始化
     */
    private void init() {
        mBgColor = mContext.getResources().getColor(R.color.white_FFFFFF);
        mTvColor = mContext.getResources().getColor(R.color.black_000000);
        mTvTextSize = 13f;
        maxCellWidth = ConvertUtils.dp2px(maxCellWidth);
        minCellWidth = ConvertUtils.dp2px(minCellWidth);
        removeAllViews();
        setOrientation(LinearLayout.HORIZONTAL);
    }


    /**
     * 设置展示数据源
     *
     * @param datas
     */
    public void setCellDatas(List<String> datas) {
        mCellDatas = datas;
    }

    /**
     * 设置对应宽度
     *
     * @param widths
     */
    public void setCellWidths(List<Integer> widths) {
        mCellWidths = widths;
    }

    /**
     * 设置背景颜色
     *
     * @param color
     */
    public void setCellBackgroudColor(int color) {
        this.mBgColor = color;
    }

    /**
     * 设置文字颜色
     *
     * @param color
     */
    public void setCellTextColor(int color) {
        this.mTvColor = color;
    }

    /**
     * 设置文字大小
     *
     * @param size
     */
    public void setCellTextSize(int size) {
        this.mTvTextSize = size;
    }

    /**
     * 设置高度
     *
     * @param height
     */
    public void setCellHeight(int height) {
        this.mCellHeightUnit = height;
    }

    /**
     * 设置宽度
     *
     * @param width
     */
    public void setCellWidth(int width) {
        this.mCellWidthUnit = width;
    }

    /**
     * 获取单位宽度
     *
     * @return
     */
    public int getCellWidthUnit() {
        return this.mCellWidthUnit;
    }

    /**
     * 设置操作项颜色
     *
     * @param colors
     */
    public void setOpColors(List<Integer> colors) {
        opColors = colors;
    }

    /**
     * 设置操作项位置
     *
     * @param positions
     */
    public void setOpPositions(List<Integer> positions) {
        opPositions = positions;
    }

    /**
     * 设置操作项监听
     *
     * @param listeners
     */
    public void setOpListeners(List<OnClickListener> listeners) {
        mClickListeners = listeners;
    }

    /**
     * 添加单元格
     */
    public void addCellView() {
        if (ObjectUtils.isNotEmpty(mCellDatas)) { // 判空
            if (ObjectUtils.isEmpty(mCellTv)) { // 如果没有子view 则创建 防止重复创建 影响性能
                for (int i = 0; i < mCellDatas.size(); i++) {
                    View view = LayoutInflater.from(mContext).inflate(R.layout.cell_excel, null, true);
                    MarqueeTextView cellTv = view.findViewById(R.id.excel_cell_tv);
                    cellTv.setTextColor(mTvColor);
                    cellTv.setTextSize(mTvTextSize);
                    cellTv.setBackgroundColor(mBgColor);
                    cellTv.setText(mCellDatas.get(i));
                    if (ObjectUtils.isNotEmpty(opPositions)) { // 处理特殊操作
                        for (int j = 0; j < opPositions.size(); j++) {
                            if (i == opPositions.get(j)) {
                                if (ObjectUtils.isNotEmpty(opColors)) {
                                    cellTv.setTextColor(opColors.get(j));
                                }
                                if (ObjectUtils.isNotEmpty(mClickListeners)) {
                                    cellTv.setOnClickListener(mClickListeners.get(j));
                                }
                                break;
                            }
                        }
                    }
                    ViewGroup.LayoutParams params = cellTv.getLayoutParams();
                    int width;
                    if (ObjectUtils.isNotEmpty(mCellWidths)) {
                        width = mCellWidths.get(i);
                    } else {
                        width = ConvertUtils.dp2px(mCellDatas.get(i).length() * mCellWidthUnit);
                    }
                    if (width > maxCellWidth) {
                        width = maxCellWidth;
                    }
                    if (width < minCellWidth) {
                        width = minCellWidth;
                    }
                    params.width = width;
                    params.height = ConvertUtils.dp2px(mCellHeightUnit);
                    cellTv.setLayoutParams(params);
                    mCellTv.add(cellTv);
                    addView(view);
                }
            } else { // 已存在子view 则直接修改内容
                for (int i = 0; i < mCellDatas.size(); i++) {
                    MarqueeTextView cellTv = mCellTv.get(i);
                    cellTv.setTextColor(mTvColor);
                    cellTv.setTextSize(mTvTextSize);
                    cellTv.setBackgroundColor(mBgColor);
                    cellTv.setText(mCellDatas.get(i));
                    if (ObjectUtils.isNotEmpty(opPositions)) { // 处理特殊操作
                        for (int j = 0; j < opPositions.size(); j++) {
                            if (i == opPositions.get(j)) {
                                if (ObjectUtils.isNotEmpty(opColors)) {
                                    cellTv.setTextColor(opColors.get(j));
                                }
                                if (ObjectUtils.isNotEmpty(mClickListeners)) {
                                    cellTv.setOnClickListener(mClickListeners.get(j));
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
}
